package 力扣题库;

import java.util.Arrays;

public class p88合并两个有序数组 {
    public void merge1(int[] nums1, int m, int[] nums2, int n) {
        //将 num2 合并到 num1 中，再对 num1进行排序
        for (int i = 0; i < n; i++) {
            nums1[m+i]=nums2[i];
        }
        Arrays.sort(nums1);
    }

    public void merge(int[] nums1, int m, int[] nums2, int n) {
        //逆向双指针
        int num1last=m-1;
        int num2last=n-1;
        int tail=m+n-1;//合并后的最后一个下标

        while (num1last >= 0 || num2last >= 0) {
            //因为 m n 可能不相等，所以用 ||
            if (num1last<0) {
                //nums1数组中的元素已经排序结束，把nums2的剩余元素再依次添加
                nums1[tail]=nums2[num2last];
                num2last--;
            }else if (num2last<0) {
                //nums2数组中的元素已经排序结束，把nums1的剩余元素再依次添加
                nums1[tail]=nums1[num1last];
                num1last--;
            }else if (nums1[num1last] > nums2[num2last]) {
                nums1[tail]=nums1[num1last];
                num1last--;
            }else {
                nums1[tail]=nums2[num2last];
                num2last--;
            }
            tail--;
        }

    }
}
